package com.gxa.hualianeshop.controller;

import com.gxa.hualianeshop.common.base.R;
import com.gxa.hualianeshop.component.ActiveMQProducer;
import com.gxa.hualianeshop.entity.dto.OrderDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author bill
 * @date 2023/7/14 16:39
 */
@RestController
@RequestMapping("/order")
public class OrderController {

    /**
     * 直接存入数据库
     * @param orderDto 订单传输对象
     * @return R
     */
    @PostMapping("/createByDB")
    public R createByDB(@RequestBody OrderDto orderDto){
        return null;
    }


    //注入一个生产者, 并配置activeMQ(service配置过)
    @Autowired
    private ActiveMQProducer producer;

    //FIXME : 把高并发的订单业务转移到service微服务

    /**
     * 作业要完成的流程:
     * 当生成雪花算法的订单编号,并返回给了前端
     * 把订单编号+用户编号+ 购物车信息(CartItem)或缓存中的购物信息(秒杀等购买直接进redis) 存入redis
     * 将订单编号存入消息队列
     * 再准备一个监听器, 监听生成订单到数据库的队列
     * 监听时,将订单信息写入数据库, 删除redis缓存的订单数据
     * 返回订单编号给前端
     * @return
     */
    @PostMapping("/createWithMQ")
    public R createWithMQ(Long orderId){

        //把订单存入消息队列
        producer.sendTextMessage("orderIdQueue",orderId.toString());


        return R.ok(orderId);
    }
}
